<?

/**
 * Home class
 *
 * Clase que gestiona la home
 * @author Alejandro Garcia del Rio <alejandro.garciadelrio@elserver.com>
 * @version 1.0
 * @package Home
*/
class Home extends Core {

	static protected $instancia;
	static protected $opciones = array(
		'rpp' => 2000, // Resultados por pagina 
		'filtros' => array(), // Filtros para la funcion listar
		'page' => 1, // Numero de pagina por defecto
		'order' => array('p.id_proyecto', 'ASC') // Ordenamiento de listar() con el tipo de ordenamiento (opcional)
	);
	private $count = 0;
	private $paginas = 0;
	public $path = 'uploads/home/';
 
	function __construct ($opciones=null) {
		// Llamo al constructor del parent tambien
		parent::__construct();
		// Seteo las opciones
		if ($opciones)
			$this->opciones($opciones);
	}

	/**
	 * Devuelve una unica instancia de esta clase
	 * 
	 * @return object Instancia de esta clase
	 */
	public static function getInstance() {
		if (!self::$instancia instanceof self)
			self::$instancia = new self;
		return self::$instancia;
	}

	/**
	 * Setea las opciones 
	 * 
	 * @param array $opciones (opcional) Opciones validas para esta clase. Si esta vacio, funciona como un getter.
	 * @return array $opciones Listado de opciones
	 */
	public function opciones ($opciones=null) {
		return self::$opciones = parent::opciones(self::$opciones, $opciones);
	}

	/**
	 * Devuelve el listado de imagenes
	 * 
	 * @return array
	 */
	public function imagenes () {

		// Obtengo el objeto de base de datos
		$db = ($this)? $this->db : ez_sql::getInstance();

		// Busco las imagenes
		$query = "SELECT *
				FROM home_images
				WHERE 1=1 ORDER BY orden, id_home_image";

		if ($resultados = $db->get_results($query))
			foreach ($resultados as $k => $v)
				$resultados[$k]['img'] = CONFIG_SITE_URL.$this->path.$v['img'];

		return $resultados;
	}

	/**
	 * Agrega una imagen de la home
	 * 
	 * @param string $imagen La ruta fisica de la imagen que se quiere agregar
	 * @param string $nombre El nombre de la imagen que se quiere agregar
	 * @return integer
	 */
	public function imagen_agregar ($imagen, $nombre) {

		// Obtengo el objeto de base de datos
		$db = ($this)? $this->db : ez_sql::getInstance();

		@mkdir(preg_replace('/^(.+?)(\/)$/', '\\1', CONFIG_DOCUMENT_ROOT.$this->path), 0755, true);

		// Obtengo la extension de la imagen
		$extension = end(explode('.', $nombre));

		// Genero el nombre de la imagen
		$name = time().'-'.rand(1, 10000).'.'.$extension;

		// Muevo la imagen
		if (!move_uploaded_file($imagen, CONFIG_DOCUMENT_ROOT.$this->path.$name))
			return $this->fail("Error al subir la imagen");

		// Obtengo el objeto de base de datos
		$db = ($this)? $this->db : ez_sql::getInstance();

		// Agrego el registro en la base de datos
		$id_image = $db->insert('home_images', array('img' => $name));

		return $id_image;
	}

	/**
	 * Elimina una imagen de la home
	 * 
	 * @param integer $id_imagen El id de la imagen que se quiere eliminar
	 * @return boolean
	 */
	public function imagen_eliminar ($id_imagen) {

		// Saneamiento de variables
		$id_imagen = addslashes($id_imagen);

		// Obtengo el objeto de base de datos
		$db = ($this)? $this->db : ez_sql::getInstance();

		// Borro el archivo
		@unlink(CONFIG_DOCUMENT_ROOT.$this->path.$db->get_var("SELECT img FROM home_images WHERE id_home_image = '$id_imagen'"));

		// Borro el registro
		$db->query("DELETE FROM home_images WHERE id_home_image = '$id_imagen'");

		return true;
	}

	/**
	 * Reordena las imagenes de la home
	 * 
	 * @param array $imagenes El array de imagenes a ordenar (id_imagen => orden)
	 * @return boolean
	 */
	public function imagenes_ordenar ($imagenes) {

		// Obtengo el objeto de base de datos
		$db = ($this)? $this->db : ez_sql::getInstance();

		foreach ($imagenes['orden'] as $k => $v)
			$db->update('home_images', array('id_home_image' => $k, 'orden' => $imagenes['orden'][$k], 'texto' => $imagenes['texto'][$k], 'titulo' => $imagenes['titulo'][$k]));

		return true;
	}

}
 
?>
